home *** CD-ROM | disk | FTP | other *** search
/ Freelog 115 / FreelogNo115-MaiJuin2013.iso / Internet / Filezilla Server / FileZilla_Server-0_9_41.exe / source / AdminInterface.cpp < prev    next >
C/C++ Source or Header  |  2011-11-06  |  3KB  |  100 lines

  1. // FileZilla Server - a Windows ftp server
  2.  
  3. // Copyright (C) 2002-2004 - Tim Kosse <tim.kosse@gmx.de>
  4.  
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9.  
  10. // This program is distributed in the hope that it will be useful,
  11. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. // GNU General Public License for more details.
  14.  
  15. // You should have received a copy of the GNU General Public License
  16. // along with this program; if not, write to the Free Software
  17. // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  
  19. // AdminInterface.cpp: Implementierung der Klasse CAdminInterface.
  20. //
  21. //////////////////////////////////////////////////////////////////////
  22.  
  23. #include "stdafx.h"
  24. #include "AdminInterface.h"
  25. #include "AdminSocket.h"
  26. #include "Server.h"
  27.  
  28. //////////////////////////////////////////////////////////////////////
  29. // Konstruktion/Destruktion
  30. //////////////////////////////////////////////////////////////////////
  31.  
  32. CAdminInterface::CAdminInterface(CServer *pServer)
  33. {
  34.     ASSERT(pServer);
  35.     m_pServer = pServer;
  36. }
  37.  
  38. CAdminInterface::~CAdminInterface()
  39. {
  40.     for (std::list<CAdminSocket *>::iterator iter = m_AdminSocketList.begin(); iter != m_AdminSocketList.end(); iter++)
  41.         delete *iter;
  42. }
  43.  
  44. BOOL CAdminInterface::Add(CAdminSocket *pAdminSocket)
  45. {
  46.     if (pAdminSocket->Init())
  47.     {
  48.         m_AdminSocketList.push_back(pAdminSocket);
  49.         return TRUE;
  50.     }
  51.     return FALSE;
  52. }
  53.  
  54. BOOL CAdminInterface::SendCommand(int nType, int nID, const void *pData, int nDataLength)
  55. {
  56.     ASSERT((!nDataLength && !pData) || (pData && nDataLength));
  57.  
  58.     std::list<CAdminSocket *> deleteList;
  59.     std::list<CAdminSocket *>::iterator iter;
  60.     for (iter = m_AdminSocketList.begin(); iter != m_AdminSocketList.end(); iter++)
  61.         if (!(*iter)->SendCommand(nType, nID, pData, nDataLength))
  62.         {
  63.             deleteList.push_back(*iter);
  64.         }
  65.     
  66.     for (iter = deleteList.begin(); iter != deleteList.end(); iter++)
  67.         VERIFY(Remove(*iter));
  68.     return TRUE;
  69. }
  70.  
  71. BOOL CAdminInterface::Remove(CAdminSocket *pAdminSocket)
  72. {
  73.     for (std::list<CAdminSocket *>::iterator iter = m_AdminSocketList.begin(); iter != m_AdminSocketList.end(); iter++)
  74.         if (*iter == pAdminSocket)
  75.         {
  76.             delete *iter;
  77.             m_AdminSocketList.erase(iter);
  78.             return TRUE;
  79.         }
  80.     return FALSE;
  81. }
  82.  
  83. BOOL CAdminInterface::ProcessCommand(CAdminSocket *pAdminSocket, int nID, void *pData, int nDataLength)
  84. {
  85.     m_pServer->ProcessCommand(pAdminSocket, nID, reinterpret_cast<unsigned char *>(pData), nDataLength);
  86.     return TRUE;
  87. }
  88.  
  89. void CAdminInterface::CheckForTimeout()
  90. {
  91.     std::list<CAdminSocket *> deleteList;
  92.     std::list<CAdminSocket *>::iterator iter;
  93.     for (iter=m_AdminSocketList.begin(); iter!=m_AdminSocketList.end(); iter++)
  94.         if ((*iter)->CheckForTimeout())
  95.             deleteList.push_back(*iter);
  96.         
  97.     for (iter=deleteList.begin(); iter!=deleteList.end(); iter++)
  98.         VERIFY(Remove(*iter));
  99. }
  100.